/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


import bomberman.pl.divano.gra.Gra;
import bomberman.pl.divano.gra.STAŁE;
import bomberman.pl.divano.interfejs.Okno;
import bomberman.pl.divano.klient.KlientNadawca;
import bomberman.pl.divano.klient.KlientOdbiorca;
import bomberman.pl.divano.server.SerwerNadawca;
import bomberman.pl.divano.server.SerwerOdbiorca;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author divano
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception {
        Gra bomberman;// = new Gra();
        
        // Gniazdo na którym będzie nasłuchiwał serwer (połączeniowe)
        try{
        if (args[0].equals("serwer")) {
            bomberman = new Gra(true);
            SerwerNadawca nadajacy = new SerwerNadawca(bomberman);
            new Thread(nadajacy).start();
            ServerSocket ss = new ServerSocket(new Integer(args[1]));
            while (bomberman.getAktorzy().size() < 4) {
                Socket klient = ss.accept();
                SerwerOdbiorca so = new SerwerOdbiorca(klient, bomberman, nadajacy);
                nadajacy.dodajKlienta(klient);
                
                //SerwerNadawca sn = new SerwerNadawca(klient, bomberman);
                /*start() wywołuje metodę run() w nowym wątku,
                 * jeśli by się wywołało metodę run() to
                 * odpalona zostałaby w tym samym wątku */
                new Thread(so).start();
                //new Thread(sn).start();
            }
        } else {
            bomberman = new Gra();
            try {
                Socket serwer = new Socket(args[1], new Integer(args[2]));
                System.out.println("Połączono");
                KlientNadawca wk = new KlientNadawca(bomberman, serwer);
                //new Thread(wk).start();
                KlientOdbiorca ok = new KlientOdbiorca(bomberman, serwer,wk);
                new Thread(ok).start();
                Okno a = new Okno(bomberman, wk);
                while(true){
                    a.invalidate();		// nie wiadomo co to robi
                    a.rysuj();			// rysuje wszystko

                    //Thread.sleep(STAŁE.SYNCHRONIZACJA/2);
                    TimeUnit.MILLISECONDS.sleep(10);
                }
            } catch (UnknownHostException ex) {
                //Logger.getLogger(KlientNadawca.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Nieznany host");
            } catch (IOException ex) {
                //Logger.getLogger(KlientNadawca.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Nie udalo sie nawiazac polaczenia");
            }

        }
        }catch(IndexOutOfBoundsException ex){
            System.out.println("Nie podano parametrów");
            System.out.println("serwer [port]");
            System.out.println("klient [host] [port]");
        }
    }
}
